package com.lpssfxy.service;

import com.lpssfxy.bean.R;

/**
 * 用于获取热门商品、评分最多、离线和实时商品数据
 */
public interface StaticAndRecProductService {
    // 获取评分次数最多的商品
    public R getRateMoreProductList();

    // 获取最近（月）评分次数最多的商品
    public R getRecentlyRateMoreProductList();

    /**
     * 离线计算得到的用户商品推荐列表：
     * 根据用户id查询当前用户的离线推荐结果
     * 查询语句如下：
     * db.UserRecs.aggregate([
     * {'$match':{"userId":50130}},
     * {$unwind:"$recs"},
     * {$lookup:{from:"Product",localField:"recs.productId",foreignField: "productId",as: "product"}},
     * {$unwind:"$product"},
     * {$group:{_id:{"userId":"$userId"},"products":{$push:"$product"},"count":{'$sum': -1}}},
     * {$project:{"userId":"$_id.userId","products":"$products","len": {$size: "$products"}}}
     * ]).pretty()
     */
    public R getOfflineRecs(Integer userId);

    /**
     * 实时计算得到的用户商品推荐列表：
     * 根据用户id查询当前用户的推荐结果
     * 查询语句如下：
     * db.StreamRecs.aggregate([
     * {$match:{"userId":50130}},
     * {$unwind:"$recs"},
     * {$lookup:{from:"Product",localField:"recs.productId",foreignField: "productId",as: "product"}},
     * {$unwind:"$product"},
     * {$group:{_id:{"userId":"$userId"},"products":{$push:"$product"}}},
     * {$project:{"userId":"$_id.userId","products":"$products"}}
     * ]).pretty()
     */
    public R getRealtimeRecs(Integer userId);

}
